Conversation
| //-------------------------------------------------------------// | ||
| void SingletonGlobalVars::NewRound(AddressesList& addressesList, bool& newRound) | ||
| { | ||
| int newMatch = *(int*)(addressesList.inMatch); |
There was a problem hiding this comment.
Почему бы не хранить сразу int* в AddressesList, все равно каждый раз приводишь к int* и точно ли есть необходимость в арифметике указателей?
| } | ||
|
|
||
| //-------------------------------------------------------------// | ||
| void SingletonGlobalVars::FindMaxId(const int maxPlayers, AddressesList& addressesList, int maxId) |
There was a problem hiding this comment.
Вроде бы нет необходимости в out параметре обычное нахождение максимума
|
|
||
| //names attacker | ||
| if (ents.size()) | ||
| for (std::shared_ptr<Ent>& player : ents) |
There was a problem hiding this comment.
в range based циклах можно опускать полное имя типа для простоты
| constexpr float kCrouchAdjustment = 3.0f; | ||
| constexpr float kOnGround = 2.0f; | ||
| constexpr float kCrouchHeightAdjustment = -35.0f; | ||
| constexpr float kDegreesToRad = PI / 180.0f; |
There was a problem hiding this comment.
Можно использовать стандартные средства языка
|
|
||
| bool Aim::IsOnGround(int stance) const | ||
| { | ||
| bool isFallen = false; |
There was a problem hiding this comment.
Ненужная переменная, просто возвращай true/false
| { | ||
| bool isFallen = false; | ||
| if (stance < 50 | ||
| || stance == 1234 |
There was a problem hiding this comment.
Magic numbers лучше чтобы все константы были названы. Например помести эти числа в enum
| if (((X < 0) && (Y > 0)) || ((X < 0) && (Y < 0))) | ||
| { | ||
| angle = atan(Y / X); | ||
| angle += (float)PI; |
There was a problem hiding this comment.
С-style cast почти всегда плохая идея, он незаметный в коде и может ломать код. Если очень надо, то лучше использовать reinterpret_cast но обычно такая необходимость значит, что есть ошибка в архитектуре
| angle = (float)(2 * PI + atan(Y / X)); | ||
| angle = 2 * std::numbers::pi_v<float> + atan(Y / X); | ||
| else | ||
| angle = (float)atan(Y / X); |
There was a problem hiding this comment.
тут atan итак возвращает float
| } | ||
|
|
||
| //-------------------------------------------------------------// | ||
| void Aim::Pblocks(std::shared_ptr<Ent> &enemy) |
There was a problem hiding this comment.
Передавать умный указатель по ссылке нужно только осознавая, что в таком случае счетчик ссылок может обнулиться в неподходящий момент, и ссылка перестанет ссылаться на валидные данные. В данном случае вроде бы можно, но тогда по константной ссылке, все равно только чтение
| } | ||
|
|
||
| //-------------------------------------------------------------// | ||
| std::shared_ptr<Ent> Aim::ChooseTarget(std::shared_ptr<Ent> &chosenTarget, const bool &isTk, bool &isAim) |
There was a problem hiding this comment.
зачем константная ссылка на бул? Дешевле скопировать 1 байт чем разрядность_системы_бит. Обычно бул передают по значению
|
|
||
| /////////////////////////////////////////////////////////////// | ||
| // class Ent - entity (player) | ||
| class Ent |
There was a problem hiding this comment.
Названия классов лучше не сокращать, улучшается читабельность
| int id; | ||
| int surface; | ||
| int saberAnim; | ||
| int numWeapon; |
There was a problem hiding this comment.
Количество оружия не может быть отрицательным -> лучше использовать беззнаковый инт. Индексы массива тоже всегда неотрицательны(но тут принято size_t) и т.д. если можно использовать более "узкий" тип данных лучше использовать его, поможет избежать случайных ошибок и повысит читабельность
| bool correctColor3; | ||
| bool correctColor4; | ||
|
|
||
| const char* className; |
| </PropertyGroup> | ||
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||
| <LinkIncremental>true</LinkIncremental> | ||
| <OutDir>C:\Users\ооррр\Desktop\epicHax</OutDir> |
There was a problem hiding this comment.
Пути в проекте лучше делать относительными, а не абсолютными, например у меня такой папки не было на компьютере
| <ConformanceMode>true</ConformanceMode> | ||
| <PrecompiledHeader>Use</PrecompiledHeader> | ||
| <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> | ||
| <LanguageStandard>stdcpp20</LanguageStandard> |
There was a problem hiding this comment.
Вроде в readme было написано что 20ый стандарт используется, а по факту стоял 14ый(дефолтьный)
|
|
||
| //-------------------------------------------------------------// | ||
| void VectorSubtract(const vec3_t vec1, const vec3_t vec2, vec3_t vecOut) | ||
| void VectorSubtract(const vec3_t& vec1, const vec3_t& vec2, vec3_t& vecOut) |
There was a problem hiding this comment.
1.Выходной параметр обязательно должен передаваться по ссылке, иначе создается копия, которая в последствии и изменяется внутри метода и при выходе из скоупа удаляется
2.vec1 и vec2 тоже желательно передавать по константной ссылке(констаность была правильной уже), а по ссылке чтобы не копировать
| } | ||
|
|
||
| //-------------------------------------------------------------// | ||
| void VecDivByNum(vec3_t in, float numDiv) |
There was a problem hiding this comment.
Лучше назвать более нейтрально так как по сути это in_out параметр и по ссылке конечно
| @@ -1,8 +1,4 @@ | |||
| #pragma once | |||
| #include <cmath> | |||
There was a problem hiding this comment.
В header-ы лучше не подключать лишних библиотек или заголовочных файлов, потому что ты их потом везде подключаешь и это раздувает объектные файлы и порождает циклические зависимости.
|
|
||
| constexpr float PI = 3.14159265358979323846; | ||
|
|
||
| typedef float vec3_t[3]; |
There was a problem hiding this comment.
Вместо множества свободных функций лучше сделать полноценный класс 3д вектора с переопределенными операторами т .д. . В коде это будет выглядеть как v1 - v2 и т.д.
Как минимум поместить в отдельный namespace т.к. засорять глобальную область видимости лучше не надо
| unsigned int numWeapon; | ||
| int stance; | ||
| int stance2; | ||
| int hp; |
There was a problem hiding this comment.
В производном классе не нужен член myHp, зачем дублировать уже унаследованный челн класса?
Слишком много полей в одном классе, слишком много на себя берет, нужно разбивать на иерархию скорее всего или на отдельные модули которые будут взаимодействовать между собой.
No description provided.